package com.taotao.portal.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.common.pojo.TaotaoResult;
import com.taotao.common.util.CookieUtils;
import com.taotao.common.util.HttpClientUtil;
import com.taotao.common.util.JsonUtils;
import com.taotao.pojo.TbItem;
import com.taotao.portal.pojo.CartItem;
import com.taotao.portal.service.CartService;

@Service
public class CartServiceImpl implements CartService {
	@Value("${REST_BASE_URL}")
	private String REST_BASE_URL;
	@Value("${ITEM_INFO_URL}")
	private String ITEM_INFO_URL;

	@Override
	public TaotaoResult addCartItem(long itemId, int num, HttpServletRequest request, HttpServletResponse response) {
		// 取cookie中的购物车列表
		List<CartItem> cartItemList = getCartItemList(request);
		// 判断要添加的商品是否存在于购物车中
		boolean itemExists = false;
		for (CartItem cartItem : cartItemList) {
			if (cartItem.getId() == itemId) {
				cartItem.setNum(cartItem.getNum() + num);
				itemExists = true;
				break;
			}
		}
		// 如果购物车中没有要添加的商品,则要调用taotao-rest的服务把商品信息查出来,然后再把查出来的商品添加到购物车列表中
		if (!itemExists) {
			CartItem cartItem = getCartItemById(itemId);
			if (cartItem == null)
				return TaotaoResult.build(400, "未查询到该商品信息");
			cartItem.setNum(num);
			cartItemList.add(cartItem);
		}
		// 把购物车信息写入cookie
		// 指定过期时间为1星期=7*24*60*60s
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.toJson(cartItemList), 7 * 24 * 60 * 60, true);

		return TaotaoResult.ok();
	}

	@Override
	public List<CartItem> getCartItemList(HttpServletRequest request) {
		String json = CookieUtils.getCookieValue(request, "TT_CART", true);
		if (!StringUtils.isBlank(json)) {
			try {
				List<CartItem> list = JsonUtils.toList(json, CartItem.class);
				return list;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return new ArrayList<>();
	}

	private CartItem getCartItemById(long id) {
		String json = HttpClientUtil.doGet(REST_BASE_URL + ITEM_INFO_URL + id);
		TaotaoResult taotaoResult = TaotaoResult.formatToPojo(json, TbItem.class);
		if (taotaoResult.getStatus() == 200) {
			TbItem item = (TbItem) taotaoResult.getData();
			CartItem cartItem = new CartItem();
			cartItem.setId(item.getId());
			cartItem.setTitle(item.getTitle());
			cartItem.setImage(item.getImage() == null ? "" : item.getImage().split(",")[0]);
			cartItem.setNum(1);
			cartItem.setPrice(item.getPrice());
			return cartItem;
		}

		return null;
	}

	@Override
	public TaotaoResult updateCartItem(long itemId, Integer num, HttpServletRequest request, HttpServletResponse response) {
		// 取cookie中的购物车列表
		List<CartItem> cartItemList = getCartItemList(request);
		// 判断要添加的商品是否存在于购物车中
		for (CartItem cartItem : cartItemList) {
			if (cartItem.getId() == itemId) {
				cartItem.setNum(num);
				break;
			}
		}

		// 把购物车信息写入cookie
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.toJson(cartItemList), 7 * 24 * 60 * 60, true);
		return TaotaoResult.ok();
	}

	@Override
	public TaotaoResult deleteCartItem(long itemId, HttpServletRequest request, HttpServletResponse response) {
		// 取cookie中的购物车列表
		List<CartItem> cartItemList = getCartItemList(request);
		// 判断要添加的商品是否存在于购物车中
		for (CartItem cartItem : cartItemList) {
			if (cartItem.getId() == itemId) {
				cartItemList.remove(cartItem);
				break;
			}
		}

		// 把购物车信息写入cookie
		CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.toJson(cartItemList), 7 * 24 * 60 * 60, true);
		return TaotaoResult.ok();
	}

}
